const sinon = require('sinon'); const vendorize = require('../../lib/vendorize'); const expect = require('chai').expect; const Animation = require('../../lib/Animation'); describe('Animation', () => { it('should be a class', () => { expect(Animation).is.a('function'); expect(() => new Animation()).to.not.throw(Error); }); describe('constructor()', () => { it('should throw if invalid callbacks bypassed', () => { expect(() => new Animation('linear', 500, 'function', () => {})) .to.throw(TypeError); expect(() => new Animation('linear', 500, () => {}, 'function')) .to.throw(TypeError); }); }); describe('destroy()', () => { it('should properly dereference bound objects', () => { let anim = new Animation(); expect(anim.draw).is.a('function'); expect(anim.end).is.a('function'); anim.destroy(); expect(anim.draw).equals(null); expect(anim.end).equals(null); }); it('should properly cancel animation on destroy', () => { let anim = new Animation(); window.cancelAnimationFrame = sinon.spy( vendorize('cancelAnimationFrame')); anim.animate(); anim.destroy(); //noinspection BadExpressionStatementJS expect(window.cancelAnimationFrame.called).to.be.ok; }); }); });